<template>
  <div class="login-container">
    <div class="left">11</div>
    <div class="right">
      <h1>登录</h1>
      <div class="form-container">
        <el-form ref="formRef" :rules="rules" :model="form">
          <el-form-item prop="mobile">
            <el-input ref="inputRef" v-model="form.mobile" prefix-icon="el-icon-search" :clearable="false" placeholder="请输入手机号" @blur="fn" />
          </el-form-item>
          <el-form-item prop="password">
            <el-input v-model="form.password" show-password placeholder="请输入密码" />
          </el-form-item>
          <el-form-item>
            <el-checkbox v-model="checked">用户平台使用协议</el-checkbox>
          </el-form-item>
          <el-form-item>
            <el-button class="my-btn" type="primary" @click="submit">登录</el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
  </div>
</template>

<script>
// import abc from '@/utils/request'

export default {
  name: 'LoginCom',
  data() {
    return {
      form: {
        // 手机号
        mobile: process.env.NODE_ENV === 'development' ? '13800000002' : '',
        password: process.env.NODE_ENV === 'development' ? 'hm#qd@23!' : ''
      },
      checked: true,
      rules: {
        mobile: [
          // trigger 校验的触发方式行为等，  blur失去焦点  change 内容改变
          { required: true, message: '请输入手机号', trigger: 'blur' },
          { pattern: /^1[356][0-9]{9}$/, message: '手机号格式不正确', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' }
        ]
      }
    }
  },
  beforeRouteEnter(to, from, next) {
    next()
  },
  methods: {
    fn() {

    },
    async submit() {
      // this 都是当前vue组件实例 VueComponet
      //
      // const obj = {
      //   name: '123',
      //   age: 24
      // }
      // const a = 'age'

      //
      //
      //

      // document.querySelector('xxx')
      //
      // this.$refs.inputRef.focus()
      // 一些条件在写的时候， 先写假值，使用return退出逻辑，后面再执行真的逻辑 -- 我自己写代码的一些偏好
      // 代码里面尽可能少的if  else语句 ---- 代码优化-- 使用return替换到 if else
      // if (this.checked) {
      //   发请求
      // } else {
      //   提示你必须勾选
      // }

      if (!this.checked) {
        this.$message.error('请同意协议')
        return
      }
      // 1. 回调函数
      // 2. promise then catch的写法
      // 3. async await + try --catch语法

      // const  self = this
      const that = this

      // this.$refs[formName]
      this.$refs.formRef.validate(async function(valid) {
        if (valid) {
          // 打印的时候，要是有undefined，先打印短的对象，不要点一些属性
          // 去控制台里面查看 this.$store这个大对象
          // 怎么解决this指向问题
          //
          //
          // that.$store.commit('user/setTokenMutations', 456)
          // 我们这个代码的逻辑是 在vuex里面发登录请求，不是在login.vue登录组件里面发
          // dispatch也是一个函数，函数调用返回的是一个promise

          // const res = await that.$store.dispatch('user/setTokenActions', that.form)
          // 这个res的值就是  vuex的action返回的，是我们自己手动写的
          //
          // if (res) {
          // 如果返回为true 就是登录请求成功，如果是失败就是false， 这样既可以控制浏览器不报错，又可以控制代码正常走向
          //   that.$router.push('/')
          // }

          await that.$store.dispatch('user/setTokenActions', that.form)
          that.$router.push('/')

          // abc.post('/sys/login', that.form).then(res => {
          //
          //   // res.data.token
          //   // res.token
          // })
        }
      })
      // this.$refs.formRef.validate().then(res => {
      //
      // }).catch(err => {
      //
      // })

      // try {
      //   const res = await this.$refs.formRef.validate()
      //
      // } catch (err) {
      //   // 如果没有catch，就会想浏览器抛出一个红色报错，
      //   // 如果有了catch 就是相当于告诉浏览器，这个错误我知道了，我捕获住了，你不要给我报错
      //
      // }
    }
  }
}
</script>

<style lang="scss" scoped>
.login-container {
  // background-color: skyblue;
  width: 100%;
  height: 100vh;
  display: flex;
  .left {
    // 百度搜索  flex符合属性的 一些含义
    // flex-grow 有剩余空间，是否自动扩大  0表示不扩大，1234扩大多少倍
    // flex-shrink 空间不够了，是否自动缩小  0表示不缩小
    // flex-basis 项目的基础宽度 一般不用写，浏览器自动给你算
    flex: 3 1 0%;
    // background-color: lightcoral;
    // background是一个复合属性，不是很好用
    background:  url('../../assets/common/login_back.png');
    // 图片显示的大小， 50%  cover会裁剪但是会铺满  contain 会有多余的黑边 铺不满
    background-size: cover;
    // 图片如果很小，会不会重复铺满
    background-repeat: no-repeat;
    // 图片在背景上显示的位置，默认是左上角，center是中心
    background-position: center;
    padding: 0 100px;
    border-top-right-radius: 100px;
  }
  .right {
    flex: 2 1 0%;
    // background-color: lime;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
  }
  .form-container {
    width: 70%;
  }
  .el-button.my-btn {
    width: 100%;
  }
}
</style>
